// 导入数据库
const db = require('../db/index.js')
// 导入bcrypt加密中间件
const bcrypt = require('bcryptjs')
// 导入nodejs的crypto库生成uuid
const crypto = require('crypto')
// 导入fs处理文件
fs = require('fs')

// 获取用户信息 参数： id
exports.getUserInfo = (req, res) => {
    const sql = 'select * from users where id = ?'
    db.query(sql, req.body.id, (err, result) => {
        if (err) return res.cc(err)
        result[0].password = ''
        res.send(result[0])
    })
}
// 修改姓名
exports.changeName = (req, res) => {
    const { id, name } = req.body
    const sql = 'update users set name = ? where id = ?'
    db.query(sql, [name, id], (err, result) => {
        if (err) return res.cc(err)
        res.send({
            status: 0,
            message: '修改成功'
        })
    })
}
// 修改性别
exports.changeSex = (req, res) => {
    const { id, sex } = req.body
    const sql = 'update users set sex = ? where id = ?'
    db.query(sql, [sex, id], (err, result) => {
        if (err) return res.cc(err)
        res.send({
            status: 0,
            message: '修改成功'
        })
    })
}
// 修改邮箱
exports.changeEmail = (req, res) => {
    const { id, email } = req.body
    const sql = 'update users set email = ? where id = ?'
    db.query(sql, [email, id], (err, result) => {
        if (err) return res.cc(err)
        res.send({
            status: 0,
            message: '修改成功'
        })
    })
}
// 修改用户密码 先输入旧密码oldPassword 新密码 newPassword
exports.changePassword = (req, res) => {
    const sql = 'select password from users where id = ?'
    db.query(sql, req.body.id, (err, result) => {
        if (err) return res.cc(err)
        // bcrypt
        const compareResult = bcrypt.compareSync(req.body.oldPassword, result[0].password)
        if (!compareResult) {
            res.send({
                status: 1,
                message: '原密码错误'
            })
        }
        req.body.newPassword = bcrypt.hashSync(req.body.newPassword, 10)
        const sql1 = 'update users set password = ? where id = ?'
        db.query(sql1, [req.body.newPassword, req.body.id], (err, result) => {
            if (err) return res.cc(err)
            res.send({
                status: 0,
                message: '修改成功'
            })
        })
    })
}
// 绑定账号接口
exports.bindAccount = (req, res) => {
    const { account, onlyId, url } = req.body
    // UPDATE 语句用于更新表中已存在的记录。
    const sql = 'update image set account = ? where onlyId = ?'
    // 执行sql语句
    db.query(sql, [account, onlyId], (err, result) => {
        if (err) return res.cc(err)
        // 如果更新成功，需要往用户表里面修改image_url
        // if(result.affectedRows == 1)  证明更新成功
        if (result.affectedRows == 1) {
            // 通过账号修改image_url
            const sql1 = 'update users set image_url = ? where account = ?'
            db.query(sql1, [url, account], (err, result) => {
                // 报错函数
                if (err) return res.cc(err)
                // 修改成功给前端发送信息
                res.send({
                    status: 0,
                    message: '修改成功'
                })
            })
        }
    })
}
// 验证账户与邮箱是否一致
exports.varityAccountAndEmail = (req, res) => {
    const { account, email } = req.body
    const sql = 'select * from users where account = ?'
    db.query(sql, account, (err, result) => {
        if (err) return res.cc(err)
        // res.send(result[0].email)
        if (email == result[0].email) {
            res.send({
                status: 0,
                messgae: '查询成功',
                id: result[0].id
            })
        } else {
            res.send({
                status: 1,
                messgae: '查询失败'
            })
        }
    })
}
// 新密码修改接口（忘记密码）
exports.changePasswordLogin = (req, res) => {
    const user = req.body
    user.newPassword = bcrypt.hashSync(user.newPassword, 10)
    const sql = 'update users set password = ? where id = ?'
    db.query(sql, [user.newPassword, user.id], (err, result) => {
        if (err) return res.cc(err)
        res.send({
            status: 0,
            message: '更新成功'
        })
    })
}
// 上传头像接口
exports.uploadAvatar = (req, res) => {
    // 生成唯一标识
    const onlyId = crypto.randomUUID()
    // 保存上传头像随机生成的文件名
    let oldName = req.files[0].filename;
    // console.log(req);
    
    // 在服务器中的文件名
    // Buffer.from(object, encoding)
    // object:此参数可以包含字符串，缓冲区，数组或arrayBuffer。
    // encoding:如果对象是字符串，则用于指定其编码。它是可选参数。其默认值为utf8
    let newName = Buffer.from(req.files[0].originalname, 'latin1').toString('utf8')
    // fs.renameSync(oldPath, newPath)给定旧路径下的文件同步重命名为给定新路径
    // oldPath：它包含必须重命名的文件的路径。它可以是字符串，缓冲区或URL。
    // newPath：它包含必须将文件重命名为的新路径。它可以是字符串，缓冲区或URL
    fs.renameSync('./public/upload/' + oldName, './public/upload/' + newName)
    const sql = 'insert into image set ?'
    db.query(sql, {
        image_url: `http://127.0.0.1:3007/upload/${newName}`,
        onlyId
    }, (err, result) => {
        if (err) return res.cc(err)
        res.send({
            onlyId,
            status: 0,
            url: 'http://127.0.0.1:3007/upload/' + newName
        })
    })
}
